package com.yulebaby.callsenter.ui.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

/**
 * @author YK
 * 自定义listview
 * @date 2017-1-4.
 */

public class ScrollDisabledListView extends ListView {
    private int mPosition;
    private float StartX,ScollY,StartY,ScollX;

    public ScrollDisabledListView(Context context) {
        super(context);
    }

    public ScrollDisabledListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;

        if (actionMasked == MotionEvent.ACTION_DOWN) {
            // 记录手指按下时的位置
            mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
            return super.dispatchTouchEvent(ev);
        }

        if (actionMasked == MotionEvent.ACTION_MOVE) {
            // 最关键的地方，忽略MOVE 事件
            // ListView onTouch获取不到MOVE事件所以不会发生滚动处理
            return false;
        }

        // 手指抬起时
        if (actionMasked == MotionEvent.ACTION_UP
                || actionMasked == MotionEvent.ACTION_CANCEL) {
            // 手指按下与抬起都在同一个视图内，交给父控件处理，这是一个点击事件
            if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
                super.dispatchTouchEvent(ev);
            } else {
                // 如果手指已经移出按下时的Item，说明是滚动行为，清理Item pressed状态
                setPressed(false);
                invalidate();
                return false;
            }
        }

        return super.dispatchTouchEvent(ev);
    }

    int flag = 0;
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
//总是调用listview的touch事件处理
        onTouchEvent(ev);
        if(ev.getAction()==MotionEvent.ACTION_DOWN){
            StartX = ev.getX();
            StartY = ev.getY();
            return false;
        }
        if(ev.getAction()==MotionEvent.ACTION_MOVE){
            ScollX = ev.getX()-StartX;
            ScollY = ev.getY()-StartY;
//判断是横滑还是竖滑，竖滑的话拦截move事件和up事件（不拦截会由于listview和scrollview同时执行滑动卡顿）
            if(Math.abs(ScollX)<Math.abs(ScollY)){
                flag = 1;
                return true;
            }
            return false;
        }
        if(ev.getAction()==MotionEvent.ACTION_UP){
            if(flag==1){

                return true;
            }
            return false;
        }
        return super.onInterceptTouchEvent(ev);
    }

}
